home *** CD-ROM | disk | FTP | other *** search
/ BMUG Revelations / BMUG Revelations.toast / Programming / Programming Languages / UCB Logo 3.0 / CSLS / match < prev    next >
Text File  |  1992-09-04  |  3KB  |  149 lines

  1. TO MATCH!
  2. IF EMPTYP :SEN [OP "FALSE]
  3. IF NOT TRY.PRED [OP "FALSE]
  4. MAKE :SPECIAL.VAR FIRST :SEN
  5. OP MATCH BF :PAT BF :SEN
  6. END
  7.  
  8. TO MATCH#
  9. MAKE :SPECIAL.VAR []
  10. OP #TEST #GATHER :SEN
  11. END
  12.  
  13. TO #GATHER :SEN
  14. IF EMPTYP :SEN [OP :SEN]
  15. IF NOT TRY.PRED [OP :SEN]
  16. MAKE :SPECIAL.VAR LPUT FIRST :SEN THING :SPECIAL.VAR
  17. OP #GATHER BF :SEN
  18. END
  19.  
  20. TO #TEST :SEN
  21. IF MATCH BF :PAT :SEN [OP "TRUE]
  22. IF EMPTYP THING :SPECIAL.VAR [OP "FALSE]
  23. OP #TEST2 FPUT LAST THING :SPECIAL.VAR :SEN
  24. END
  25.  
  26. TO #TEST2 :SEN
  27. MAKE :SPECIAL.VAR BL THING :SPECIAL.VAR
  28. OP #TEST :SEN
  29. END
  30.  
  31. TO MATCH&
  32. OP &TEST MATCH#
  33. END
  34.  
  35. TO &TEST :TF
  36. IF EMPTYP THING :SPECIAL.VAR [OP "FALSE]
  37. OP :TF
  38. END
  39.  
  40. TO MATCH?
  41. MAKE :SPECIAL.VAR []
  42. IF EMPTYP :SEN [OP MATCH BF :PAT :SEN]
  43. IF NOT TRY.PRED [OP MATCH BF :PAT :SEN]
  44. MAKE :SPECIAL.VAR FIRST :SEN
  45. IF MATCH BF :PAT BF :SEN [OP "TRUE]
  46. MAKE :SPECIAL.VAR []
  47. OP MATCH BF :PAT :SEN
  48. END
  49.  
  50. TO MATCH@
  51. MAKE :SPECIAL.VAR :SEN
  52. OP @TEST []
  53. END
  54.  
  55. TO @TEST :SEN
  56. IF @TRY.PRED [IF MATCH BF :PAT :SEN [OP "TRUE]]
  57. IF EMPTYP THING :SPECIAL.VAR [OP "FALSE]
  58. OP @TEST2 FPUT LAST THING :SPECIAL.VAR :SEN
  59. END
  60.  
  61. TO @TEST2 :SEN
  62. MAKE :SPECIAL.VAR BL THING :SPECIAL.VAR
  63. OP @TEST :SEN
  64. END
  65.  
  66. TO @TRY.PRED
  67. IF LISTP :SPECIAL.PRED [OP MATCH :SPECIAL.PRED THING :SPECIAL.VAR]
  68. OP RUN LIST :SPECIAL.PRED THING :SPECIAL.VAR
  69. END
  70.  
  71. TO MATCH^
  72. MAKE :SPECIAL.VAR []
  73. OUTPUT ^TEST :SEN
  74. END
  75.  
  76. TO ^TEST :SEN
  77. IF MATCH BF :PAT :SEN [OUTPUT "TRUE]
  78. IF EMPTYP :SEN [OUTPUT "FALSE]
  79. IF NOT TRY.PRED [OUTPUT "FALSE]
  80. MAKE :SPECIAL.VAR LPUT FIRST :SEN THING :SPECIAL.VAR
  81. OUTPUT ^TEST BF :SEN
  82. END
  83.  
  84. TO ALWAYS :X
  85. OP "TRUE
  86. END
  87.  
  88. TO ANYOF :SEN
  89. OP ANYOF1 :SEN :IN.LIST
  90. END
  91.  
  92. TO ANYOF1 :SEN :PATS
  93. IF EMPTYP :PATS [OP "FALSE]
  94. IF MATCH FIRST :PATS :SEN [OP "TRUE]
  95. OP ANYOF1 :SEN BF :PATS
  96. END
  97.  
  98. TO IN :WORD
  99. OP MEMBERP :WORD :IN.LIST
  100. END
  101.  
  102. TO MATCH :PAT :SEN
  103. LOCAL [SPECIAL.VAR SPECIAL.PRED SPECIAL.BUFFER IN.LIST]
  104. IF OR WORDP :PAT WORDP :SEN [OP "FALSE]
  105. IF EMPTYP :PAT [OP EMPTYP :SEN]
  106. IF LISTP FIRST :PAT [OP SPECIAL FPUT "!: :PAT :SEN]
  107. IF MEMBERP FIRST FIRST :PAT [? # ! & @ ^] [OP SPECIAL :PAT :SEN]
  108. IF EMPTYP :SEN [OP "FALSE]
  109. IF EQUALP FIRST :PAT FIRST :SEN [OP MATCH BF :PAT BF :SEN]
  110. OP "FALSE
  111. END
  112.  
  113. TO PARSE.SPECIAL :WORD :VAR
  114. IF EMPTYP :WORD [OP LIST :VAR "ALWAYS]
  115. IF EQUALP FIRST :WORD ": [OP LIST :VAR BF :WORD]
  116. OP PARSE.SPECIAL BF :WORD WORD :VAR FIRST :WORD
  117. END
  118.  
  119. TO QUOTED :THING
  120. IF LISTP :THING [OP :THING]
  121. OP WORD "" :THING
  122. END
  123.  
  124. TO SET.IN
  125. MAKE "IN.LIST FIRST BF :PAT
  126. MAKE "PAT FPUT FIRST :PAT BF BF :PAT
  127. END
  128.  
  129. TO SET.SPECIAL :LIST
  130. MAKE "SPECIAL.VAR FIRST :LIST
  131. MAKE "SPECIAL.PRED LAST :LIST
  132. IF EMPTYP :SPECIAL.VAR [MAKE "SPECIAL.VAR "SPECIAL.BUFFER]
  133. IF MEMBERP :SPECIAL.PRED [IN ANYOF] [SET.IN]
  134. IF NOT EMPTYP :SPECIAL.PRED [STOP]
  135. MAKE "SPECIAL.PRED FIRST BF :PAT
  136. MAKE "PAT FPUT FIRST :PAT BF BF :PAT
  137. END
  138.  
  139. TO SPECIAL :PAT :SEN
  140. SET.SPECIAL PARSE.SPECIAL BF FIRST :PAT "
  141. OP RUN FPUT WORD "MATCH FIRST FIRST :PAT []
  142. END
  143.  
  144. TO TRY.PRED
  145. IF LISTP :SPECIAL.PRED [OP MATCH :SPECIAL.PRED FIRST :SEN]
  146. OP RUN LIST :SPECIAL.PRED QUOTED FIRST :SEN
  147. END
  148.  
  149.